CVE-2026-23352
x86/efi: defer freeing of boot services memory
Description
In the Linux kernel, the following vulnerability has been resolved: x86/efi: defer freeing of boot services memory efi_free_boot_services() frees memory occupied by EFI_BOOT_SERVICES_CODE and EFI_BOOT_SERVICES_DATA using memblock_free_late(). There are two issue with that: memblock_free_late() should be used for memory allocated with memblock_alloc() while the memory reserved with memblock_reserve() should be freed with free_reserved_area(). More acutely, with CONFIG_DEFERRED_STRUCT_PAGE_INIT=y efi_free_boot_services() is called before deferred initialization of the memory map is complete. Benjamin Herrenschmidt reports that this causes a leak of ~140MB of RAM on EC2 t3a.nano instances which only have 512MB or RAM. If the freed memory resides in the areas that memory map for them is still uninitialized, they won't be actually freed because memblock_free_late() calls memblock_free_pages() and the latter skips uninitialized pages. Using free_reserved_area() at this point is also problematic because __free_page() accesses the buddy of the freed page and that again might end up in uninitialized part of the memory map. Delaying the entire efi_free_boot_services() could be problematic because in addition to freeing boot services memory it updates efi.memmap without any synchronization and that's undesirable late in boot when there is concurrency. More robust approach is to only defer freeing of the EFI boot services memory. Split efi_free_boot_services() in two. First efi_unmap_boot_services() collects ranges that should be freed into an array then efi_free_boot_services() later frees them after deferred init is complete.
INFO
Published Date :
March 25, 2026, 11:16 a.m.
Last Modified :
April 24, 2026, 5:59 p.m.
Remotely Exploit :
No
Source :
416baaa9-dc9f-4396-8d5f-8c081fb06d67
CVSS Scores
| Score | Version | Severity | Vector | Exploitability Score | Impact Score | Source |
|---|---|---|---|---|---|---|
| CVSS 3.1 | MEDIUM | [email protected] |
Solution
- Defer freeing EFI boot services memory.
- Collect ranges to be freed into an array.
- Free collected ranges after deferred init.
- Update the kernel to the latest version.
Public PoC/Exploit Available at Github
CVE-2026-23352 has a 1 public
PoC/Exploit available at Github.
Go to the Public Exploits tab to see the list.
References to Advisories, Solutions, and Tools
Here, you will find a curated list of external links that provide in-depth
information, practical solutions, and valuable tools related to
CVE-2026-23352.
CWE - Common Weakness Enumeration
While CVE identifies
specific instances of vulnerabilities, CWE categorizes the common flaws or
weaknesses that can lead to vulnerabilities. CVE-2026-23352 is
associated with the following CWEs:
Common Attack Pattern Enumeration and Classification (CAPEC)
Common Attack Pattern Enumeration and Classification
(CAPEC)
stores attack patterns, which are descriptions of the common attributes and
approaches employed by adversaries to exploit the CVE-2026-23352
weaknesses.
We scan GitHub repositories to detect new proof-of-concept exploits. Following list is a collection of public exploits and proof-of-concepts, which have been published on GitHub (sorted by the most recently updated).
DSA and DLA for Debian last 14 days
Python
Results are limited to the first 15 repositories due to potential performance issues.
The following list is the news that have been mention
CVE-2026-23352 vulnerability anywhere in the article.
The following table lists the changes that have been made to the
CVE-2026-23352 vulnerability over time.
Vulnerability history details can be useful for understanding the evolution of a vulnerability, and for identifying the most recent changes that may impact the vulnerability's severity, exploitability, or other characteristics.
-
Initial Analysis by [email protected]
Apr. 24, 2026
Action Type Old Value New Value Added CVSS V3.1 AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H Added CWE CWE-401 Added CPE Configuration OR *cpe:2.3:o:linux:linux_kernel:2.6.39.1:*:*:*:*:*:*:* *cpe:2.3:o:linux:linux_kernel:3.0:-:*:*:*:*:*:* *cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* versions from (including) 6.19 up to (excluding) 6.19.7 *cpe:2.3:o:linux:linux_kernel:7.0:rc1:*:*:*:*:*:* *cpe:2.3:o:linux:linux_kernel:7.0:rc2:*:*:*:*:*:* *cpe:2.3:o:linux:linux_kernel:7.0:rc3:*:*:*:*:*:* *cpe:2.3:o:linux:linux_kernel:7.0:rc4:*:*:*:*:*:* *cpe:2.3:o:linux:linux_kernel:7.0:rc5:*:*:*:*:*:* *cpe:2.3:o:linux:linux_kernel:7.0:rc6:*:*:*:*:*:* *cpe:2.3:o:linux:linux_kernel:7.0:rc7:*:*:*:*:*:* *cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* versions from (including) 6.13 up to (excluding) 6.18.17 *cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* versions from (including) 6.2 up to (excluding) 6.6.130 *cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* versions from (including) 6.7 up to (excluding) 6.12.77 *cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* versions from (including) 5.11 up to (excluding) 5.15.203 *cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* versions from (including) 5.16 up to (excluding) 6.1.167 *cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* versions from (including) 3.0.1 up to (excluding) 5.10.253 Added Reference Type kernel.org: https://git.kernel.org/stable/c/227688312fece0026fc67a00ba9a0b3611ebe95d Types: Patch Added Reference Type kernel.org: https://git.kernel.org/stable/c/399da820ecfe6f4f10c143e5c453d3559a04db9c Types: Patch Added Reference Type kernel.org: https://git.kernel.org/stable/c/4a2cb90c538f06c873a187aa743575d48685d7a6 Types: Patch Added Reference Type kernel.org: https://git.kernel.org/stable/c/6a25e25279282c5c8ade554c04c6ab9dc7902c64 Types: Patch Added Reference Type kernel.org: https://git.kernel.org/stable/c/6d8ba221e7aafaa2f284b7d22faee814c28e009d Types: Patch Added Reference Type kernel.org: https://git.kernel.org/stable/c/7131bd1fecc749bc94fb44aae217bbd8a8a85264 Types: Patch Added Reference Type kernel.org: https://git.kernel.org/stable/c/7dcf59422a3b0d20ddda844f856b4a1e0608a326 Types: Patch Added Reference Type kernel.org: https://git.kernel.org/stable/c/a4b0bf6a40f3c107c67a24fbc614510ef5719980 Types: Patch Added Reference Type kernel.org: https://git.kernel.org/stable/c/f9e9cc320854a76a39e7bc92d144554f3a727fad Types: Patch -
CVE Modified by 416baaa9-dc9f-4396-8d5f-8c081fb06d67
Apr. 18, 2026
Action Type Old Value New Value Added Reference https://git.kernel.org/stable/c/6d8ba221e7aafaa2f284b7d22faee814c28e009d Added Reference https://git.kernel.org/stable/c/7131bd1fecc749bc94fb44aae217bbd8a8a85264 -
New CVE Received by 416baaa9-dc9f-4396-8d5f-8c081fb06d67
Mar. 25, 2026
Action Type Old Value New Value Added Description In the Linux kernel, the following vulnerability has been resolved: x86/efi: defer freeing of boot services memory efi_free_boot_services() frees memory occupied by EFI_BOOT_SERVICES_CODE and EFI_BOOT_SERVICES_DATA using memblock_free_late(). There are two issue with that: memblock_free_late() should be used for memory allocated with memblock_alloc() while the memory reserved with memblock_reserve() should be freed with free_reserved_area(). More acutely, with CONFIG_DEFERRED_STRUCT_PAGE_INIT=y efi_free_boot_services() is called before deferred initialization of the memory map is complete. Benjamin Herrenschmidt reports that this causes a leak of ~140MB of RAM on EC2 t3a.nano instances which only have 512MB or RAM. If the freed memory resides in the areas that memory map for them is still uninitialized, they won't be actually freed because memblock_free_late() calls memblock_free_pages() and the latter skips uninitialized pages. Using free_reserved_area() at this point is also problematic because __free_page() accesses the buddy of the freed page and that again might end up in uninitialized part of the memory map. Delaying the entire efi_free_boot_services() could be problematic because in addition to freeing boot services memory it updates efi.memmap without any synchronization and that's undesirable late in boot when there is concurrency. More robust approach is to only defer freeing of the EFI boot services memory. Split efi_free_boot_services() in two. First efi_unmap_boot_services() collects ranges that should be freed into an array then efi_free_boot_services() later frees them after deferred init is complete. Added Reference https://git.kernel.org/stable/c/227688312fece0026fc67a00ba9a0b3611ebe95d Added Reference https://git.kernel.org/stable/c/399da820ecfe6f4f10c143e5c453d3559a04db9c Added Reference https://git.kernel.org/stable/c/4a2cb90c538f06c873a187aa743575d48685d7a6 Added Reference https://git.kernel.org/stable/c/6a25e25279282c5c8ade554c04c6ab9dc7902c64 Added Reference https://git.kernel.org/stable/c/7dcf59422a3b0d20ddda844f856b4a1e0608a326 Added Reference https://git.kernel.org/stable/c/a4b0bf6a40f3c107c67a24fbc614510ef5719980 Added Reference https://git.kernel.org/stable/c/f9e9cc320854a76a39e7bc92d144554f3a727fad